﻿// See https://aka.ms/new-console-template for more information
//leetcode 463.岛的周长 https://leetcode.cn/problems/island-perimeter/
//给定一个 row x col 的二维网格地图 grid ，其中：grid[i][j] = 1 表示陆地， grid[i][j] = 0 表示水域。
//网格中的格子 水平和垂直 方向相连（对角线方向不相连）。整个网格被水完全包围，但其中恰好有一个岛屿（或者说，一个或多个表示陆地的格子相连组成的岛屿）。
//岛屿中没有“湖”（“湖” 指水域在岛屿内部且不和岛屿周围的水相连）。格子是边长为 1 的正方形。网格为长方形，且宽度和高度均不超过 100 。计算这个岛屿的周长。
using System.Diagnostics;

Console.WriteLine("hellow world");
int[][] grid = new int[][] { new int[] { 0, 1, 0, 0 }, new int[] { 1, 1, 1, 0 }, new int[] { 0, 1, 0, 0 }, new int[] { 1, 1, 0, 0 } };
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
Console.WriteLine(IslandPerimeter(grid));
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);

IslandPerimeter(grid);

int IslandPerimeter(int[][] grid)
{
    int height = grid.Length;
    int width = grid[0].Length;
    int girth = 0;
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            if (grid[i][j] == 1)
            {
                int thisgirth = 0;
                //处理四个边
                if (j >= 1)
                {
                    if (grid[i][j - 1] == 0)
                    {
                        thisgirth++;
                    }
                }
                else
                {
                    thisgirth++;
                }
                if (j <= width - 2)
                {
                    if (grid[i][j + 1] == 0)
                    {
                        thisgirth++;
                    }
                }
                else
                {
                    thisgirth++;
                }
                if (i >= 1)
                {
                    if (grid[i - 1][j] == 0)
                    {
                        thisgirth++;
                    }
                }
                else
                {
                    thisgirth++;
                }
                if (i <= height - 2)
                {
                    if (grid[i + 1][j] == 0)
                    {
                        thisgirth++;
                    }
                }
                else
                {
                    thisgirth++;
                }
                girth += thisgirth;
            }
        }
    }
    return girth;
}